<?php
App::uses('AppController', 'Controller');
/**
 * Tarefas Controller
 *
 * @property Tarefa $Tarefa
 */
class TarefasController extends AppController {

	var $paginate = array('order'=>'updated DESC');
	var $components = array('Email');
	
	public function beforeFilter(){
		parent::beforeFilter();
		$this->usuarioSessao->install($this->usuarioAtual);
	}
	
	
	public function index($idProjeto, $idStatus =  4) {
		$idStatus = $this->usuarioSessao->recuperaSubMenu($idStatus);
		if(!$this->usuarioSessao->authProjeto($idProjeto)) return false;
		$this->Tarefa->recursive = 0;
		$dados = $this->paginate(array('projetos_id'=>$idProjeto, 'status_id' => $idStatus));
		$dados = $this->Tarefa->ultimaMensagem($dados);
		$status = $this->Tarefa->Status->find('list');
		foreach ($status as $key=>$item){
			$totais[$key] = $this->Tarefa->find('count', array('conditions'=>array('projetos_id'=>$idProjeto, 'status_id'=>$key)));
		}
		$nomeProjeto = $this->Tarefa->nomeDoProjeto($idProjeto);
		$this->set('nomeProjeto', $nomeProjeto['Projetos']['nome']);
		$this->set('idProjeto', $idProjeto);
		$this->set('idStatus', $idStatus);
		$this->set('status', $status);
		$this->set('numeros_de_tarefas', $totais);
		$this->set('tarefas', $dados);
	}

/**
 * view method
 *
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if(!$this->usuarioSessao->authTarefa($id)) return false;
		$this->Tarefa->id = $id;
		if (!$this->Tarefa->exists()) {
			throw new NotFoundException(__('Invalid tarefa'));
		}
		$tarefa = $this->Tarefa->read(null, $id);
		$this->Tarefa->apagaMensagensNaoLidas($id, $this->usuarioAtual);
		$this->set('mensagens',$this->Tarefa->listaMensagems($tarefa));
		$this->set('tarefa', $tarefa);
	}

/**
 * add method
 *
 * @return void
 */
	public function add($projeto) {
		$this->request->data['Tarefa']['projetos_id'] = $projeto;
		if ($this->request->is('post')) {
			$this->request->data['Tarefa']['status_id'] = 1;
			$this->Tarefa->create();
			$this->request->data['Tarefa']['usuario_id'] = $this->usuarioAtual['id_users'];
			if ($this->Tarefa->save($this->request->data)) {
				$this->emailTarefa($this->request->data, $this->Tarefa->id);
				$this->Session->setFlash(__('A tarefa foi salva'));
				$this->redirect(array('action' => 'index', $this->request->data['Tarefa']['projetos_id']));
			} else {
				$this->Session->setFlash(__('Tarefa não pode ser salva'));
			}
		}
		$projetos = $this->usuarioSessao->projetosUsuario($this->usuarioAtual);
		$this->set(compact('projetos'));
	}

/**
 * edit method
 *
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		$this->Tarefa->id = $id;
		if (!$this->Tarefa->exists()) {
			throw new NotFoundException(__('Tarefa inválida'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Tarefa->save($this->request->data)) {
				$this->Session->setFlash(__('Tarefa salva com sucesso'));
				$this->redirect(array('action' => 'index', $this->request->data['Tarefa']['projetos_id']));
			} else {
				$this->Session->setFlash(__('Tarefa não pode ser salva. Por favor, tente novamente'));
			}
		} else {
			$this->request->data = $this->Tarefa->read(null, $id);
		}
		$projetos = $this->Tarefa->Projetos->find('list');
		$this->set(compact('projetos'));
	}

/**
 * delete method
 *
 * @param string $id
 * @return void
 */
	public function delete($id = null, $projeto = null) {
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Tarefa->id = $id;
		if (!$this->Tarefa->exists()) {
			throw new NotFoundException(__('Invalid tarefa'));
		}
		if ($this->Tarefa->delete()) {
			$this->Session->setFlash(__('Tarefa excluída'));
			$this->redirect(array('action'=>'index', $projeto));
		}
		$this->Session->setFlash(__('Tarefa não excluída'));
		$this->redirect(array('action' => 'index', $projeto));
	}
	
	public function admin_index($idProjeto, $idStatus = null){
		$idStatus = $this->usuarioSessao->recuperaSubMenu($idStatus);
		$this->Tarefa->recursive = 0;
		$dados = $this->paginate(array('projetos_id'=>$idProjeto, 'status_id'=>$idStatus));
		$dados = $this->Tarefa->ultimaMensagem($dados);
		$this->set('tarefas', $dados);
		$status = $this->Tarefa->Status->find('list');
		foreach ($status as $key=>$item){
			$totais[$key] = $this->Tarefa->find('count', array('conditions'=>array('projetos_id'=>$idProjeto, 'status_id'=>$key)));
		}
		$nomeProjeto = $this->Tarefa->nomeDoProjeto($idProjeto);
		$this->set('nomeProjeto', $nomeProjeto['Projetos']['nome']);
		$this->set('idProjeto', $idProjeto);
		$this->set('idStatus', $idStatus);
		$this->set('status', $status);
		$this->set('numeros_de_tarefas', $totais);
		$this->render('index');
		
	}
	
	public function admin_add($projeto){
		$this->request->data['Tarefa']['projetos_id'] = $projeto;
		if ($this->request->is('post')) {
			$this->Tarefa->create();
			$this->request->data['Tarefa']['usuario_id'] = $this->usuarioAtual['id_users'];
			if ($this->Tarefa->save($this->request->data)) {
				$this->emailTarefa($this->request->data, $this->Tarefa->id);
				$this->Session->setFlash(__('The tarefa has been saved'));
				$this->redirect(array('action' => 'index', $this->request->data['Tarefa']['projetos_id']));
			} else {
				$this->Session->setFlash(__('The tarefa could not be saved. Please, try again.'));
			}
		}
		$projetos = $this->Tarefa->Projetos->find('list');
		$status = $this->Tarefa->Status->find('list');
		$this->set('projetos',$projetos);
		$this->set('status',$status);
	}
	
	public function admin_edit($id = null) {
		$this->Tarefa->id = $id;
		if (!$this->Tarefa->exists()) {
			throw new NotFoundException(__('Invalid tarefa'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Tarefa->save($this->request->data)) {
				$this->Session->setFlash(__('The tarefa has been saved'));
				$this->redirect(array('action' => 'index', $this->request->data['Tarefa']['projetos_id']));
			} else {
				$this->Session->setFlash(__('The tarefa could not be saved. Please, try again.'));
			}
		} else {
			$this->request->data = $this->Tarefa->read(null, $id);
		}
		$projetos = $this->Tarefa->Projetos->find('list');
		$status = $this->Tarefa->Status->find('list');
		$this->set('status',$status);
		$this->set(compact('projetos'));
		$this->render('edit');
	}
	
	public function admin_view($id = null) {
		$this->Tarefa->id = $id;
		if (!$this->Tarefa->exists()) {
			throw new NotFoundException(__('Invalid tarefa'));
		}
		$tarefa = $this->Tarefa->read(null, $id);
		$this->set('mensagens',$this->Tarefa->listaMensagems($tarefa));
		$this->set('tarefa', $tarefa);
		$this->render('view');
	}
	
	public function admin_delete($id = null, $projeto = null){
		if(!$this->isAdmin()) return false;
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Tarefa->id = $id;
		if (!$this->Tarefa->exists()) {
			throw new NotFoundException(__('Invalid empresa'));
		}
		if ($this->Tarefa->delete()) {
			$this->Session->setFlash(__('Empresa deleted'));
			$this->redirect(array('action'=>'index', $projeto));
		}
		$this->Session->setFlash(__('Empresa was not deleted'));
		$this->redirect(array('action' => 'index', $projeto));
	}
	
	private function emailTarefa($dados, $id_tarefa){
		$this->Tarefa->Projetos->recursive = -1;
		$projeto = $this->Tarefa->Projetos->findByIdProjetos($dados['Tarefa']['projetos_id']);
		$usuarios = $this->Tarefa->Projetos->usuariosDoProjetoEmail($projeto['Projetos']['id_projetos'], $this->usuarioAtual);
		foreach($usuarios as $key=>$item){
			$this->Email->novoEmail();
			$this->Email->assunto(__('Morbi - '.$projeto['Projetos']['nome'].' - Nova Tarefa'));
			$this->Email->destinatario(array($key=>$item));
			$this->Email->set('nome', $item);
			$this->Email->set('projeto', $projeto['Projetos']['nome']);
			$this->Email->set('autor', $this->usuarioAtual['nome']);
			$this->Email->set('tarefa', $dados['Tarefa']['nome']);
			$this->Email->set('idTarefa', $id_tarefa);
//			$this->Email->set('hashUser', 1);
//			$this->Email->set('hashMensagem', 99);
			$this->Email->template('tarefa', 'default');
			$this->Email->mensagem('', $key);
		}
	}
}
